<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        @import url('https://fonts.googleapis.com/css?family=Roboto+Slab');

html, body { width:100%; height:100%; margin:0; padding:0; background:#141414; }

#clock {
  position: absolute;
  top:0; bottom:0; left:0; right:0;
  margin:auto;
  width:1000px;
  height:200px;
  text-align:center;
}

.num {
  position:relative;
  display:inline-block;
  width:140px;
  height:200px;
  font: 140px 'Roboto Slab', sans-serif;
  color:#404040;
  background:rgba(90,90,90,1);
  border:solid 3px #404040;
  box-sizing:border-box;
  border-radius:18px;
}

.colon {
  position:relative;
  display:inline-block;
  font: 140px 'Roboto Slab', sans-serif;
  top:-60px;
  left:-2px;
  color:#C3C3C3;
}

.base span {
  position:absolute;
  display:block;
  width:100%;
}

.upper {
  position:absolute;  
  width:100%;
  height:50%;
  background:linear-gradient(0deg, rgba(200,200,200,1), rgba(255,255,255,1) 15%);
  border-radius:15px 15px 0 0;  
  box-shadow: inset 0 1px 8px rgba(0,0,0,.1);
  overflow:hidden;
  border-bottom:solid 1px rgba(0,0,0,.5);
  box-sizing:border-box;
}

.lower {
  position:absolute;
  top:50%;
  width:100%;
  height:50%;
  background:linear-gradient(180deg, rgba(200,200,200,1), rgba(255,255,255,1) 15%);
  border-radius:0 0 15px 15px;  
  box-shadow: inset 0 -3px 5px rgba(0,0,0,.2);
  overflow:hidden;
  border-top:solid 1px #ddd;
  box-sizing:border-box;
}

.lower span {
  position:relative;
  top:-100%;
}
    </style>
    <title>Document</title>
</head>
<body>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenMax.min.js"></script>
        <div id="clock">
          <div id="h10" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
          
          <div id="h0" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
          
          <div class="colon">:</div>
          
          <div id="m10" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
          
          <div id="m0" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
          
          <div class="colon">:</div>
          
          <div id="s10" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
          
          <div id="s0" class="num">
            <div class="upper"></div>
            <div class="base upper"></div>
            <div class="base lower"></div>
            <div class="lower"></div>
          </div>
        </div>
    <script>
        // set 3d transforms
TweenMax.set("#clock", {perspective:1500})
TweenMax.set(".upper", {rotationX:0.01, transformOrigin:"50% 100%"})
TweenMax.set(".lower", {rotationX:0.01, transformOrigin:"50% 0%"})

// set clock
var t, ss, mm, hh;
setTimeVars();
function setTimeVars(){
  t = new Date();
  t = new Date();
	ss = String(t.getSeconds());
  mm = String(t.getMinutes());
  hh = String(t.getHours() );
  if (ss.length==1) ss = "0"+ss;
  if (mm.length==1) mm = "0"+mm;
  if (hh.length==1) hh = "0"+hh;
}

h10.childNodes[3].innerHTML = h10.childNodes[7].innerHTML = "<span>"+Number(hh.substr(0,1))+"</span>";
h0.childNodes[3].innerHTML = h0.childNodes[7].innerHTML = "<span>"+Number(String(hh).substr(1,1))+"</span>";

m10.childNodes[3].innerHTML = m10.childNodes[7].innerHTML = "<span>"+Number(mm.substr(0,1))+"</span>";
m0.childNodes[3].innerHTML = m0.childNodes[7].innerHTML = "<span>"+Number(mm.substr(1,1))+"</span>";

s10.childNodes[3].innerHTML = s10.childNodes[7].innerHTML = "<span>"+Number(ss.substr(0,1))+"</span>";
s0.childNodes[3].innerHTML = s0.childNodes[7].innerHTML = "<span>"+Number(ss.substr(1,1))+"</span>";


// start ticking
var interval = setInterval(function(){
 	setTimeVars();
  
  tick(s0, Number(ss.substr(1,1)) )
  
  if (ss.substr(1,1)=="9"){
    tick(s10, Number(ss.substr(0,1)) ) 
    if (ss=="59"){
      tick(s10, 5, true)
      tick(m0, Number(mm.substr(1,1)))
      if (mm.substr(1,1)=="9"){
        tick(m10, Number(mm.substr(0,1)))
        if (mm=="59") {
          tick(m10, 5, true)
          tick(h0, Number(hh.substr(1,1)))
          if (hh.substr(1,1)=="9") tick(h10, Number(hh.substr(0,1)))
          if (hh=="12") {
            tick(h0, Number(hh.substr(0,1)), true)
            tick(h10, Number(hh.substr(1,1)), true)
          }
        }
      }
    }
  }
  
}, 1000)

function tick(mc,i, toZero=false){
  // set numbers
  mc.childNodes[3].innerHTML = "<span>"+i+"</span>"; //start upper
  mc.childNodes[5].innerHTML = "<span>"+i+"</span>"; //start lower
  if ( i==9 || toZero ) i=-1;
  mc.childNodes[1].innerHTML = "<span>"+(i+1)+"</span>"; //end upper
  mc.childNodes[7].innerHTML = "<span>"+(i+1)+"</span>"; //end lower
  // animate tick
  TweenMax.fromTo(mc.childNodes[1], .3, {alpha:0},{alpha:1, ease:Power4.easeIn})  
  TweenMax.fromTo(mc.childNodes[3], .3, {rotationX:0, background:"linear-gradient(0deg, rgba(200,200,200,1), rgba(255,255,255,1) 15%)"},{rotationX:-90, ease:Power1.easeIn})
  TweenMax.fromTo(mc.childNodes[7], .5+.2*Math.random(), {rotationX:90},{rotationX:0, ease:Bounce.easeOut, delay:.3})
  TweenMax.fromTo(mc.childNodes[5], .6, {alpha:1},{alpha:0, ease:Bounce.easeOut, delay:.3})  
}

    </script>
</body>
</html>